package org.jsola.contract.service;

import com.timevale.esign.sdk.tech.bean.result.FileDigestSignResult;
import org.jsola.contract.constant.SealType;
import org.jsola.contract.entity.AccountDO;
import org.jsola.contract.entity.SealPositionDO;
import org.jsola.user.core.TokenUser;
import org.jsola.user.entity.UserDO;

import java.util.List;

/**
 * 第三方签署接口
 *
 * @author JanusMix
 */
public interface IThirdSignService {

    /**
     * 新建个人账户
     *
     * @param userId     用户id
     * @param name       用户名
     * @param phone      手机号
     * @param idNo       身份证号
     * @param personArea id类型
     * @param tokenUser  当前登陆用户
     * @return 账户对象
     */
    AccountDO addPersonAccount(String userId, String name, String phone, String idNo, String personArea, TokenUser tokenUser);

    /**
     * 新建企业账户
     *
     * @param enterpriseId 企业id
     * @param name         名称
     * @param regType      注册类型
     * @param organCode    组织机构代码号、社会信用代码号或工商注册号
     * @param legalName    法人姓名
     * @param agentIdNo    法人身份证号
     * @param email        君子签邮箱
     * @param tokenUser    当前登陆用户
     * @return 账户对象
     */
    AccountDO addEnterpriseAccount(String enterpriseId, String name, String regType, String organCode, String legalName,
                                   String agentIdNo, String email, TokenUser tokenUser);

    /**
     * 发送签署验证码
     *
     * @param accountId 账户id
     */
    void sendSignCode(String accountId, TokenUser tokenUser);


    /**
     * 用户验证码签署
     *
     * @param accountId  账户id
     * @param sealData   印章base64
     * @param fileStream 文件流
     * @param positions  印章位置信息
     * @param sealType   印章类型
     * @param code       验证码
     * @param tokenUser  当前登录用户
     */
    FileDigestSignResult localSafeSignPDF(String accountId, String sealData, byte[] fileStream,
                                          List<SealPositionDO> positions, SealType sealType, String code, TokenUser tokenUser);


    /**
     * 企业签署
     *
     * @param accountId  账户id
     * @param sealData   印章base64
     * @param fileStream 文件流
     * @param positions  印章位置信息
     * @param sealType   印章类型
     * @param tokenUser  当前登录用户
     */
    FileDigestSignResult localSafeSignPDF(String accountId, String sealData, byte[] fileStream,
                                          List<SealPositionDO> positions, SealType sealType, TokenUser tokenUser);

    /**
     * 企业签署（可以指定印章宽度）
     *
     * @param accountId  账户id
     * @param sealData   印章base64
     * @param fileStream 文件流
     * @param positions  印章位置信息
     * @param sealType   印章类型
     * @param width      印章宽度
     * @param tokenUser  当前登录用户
     */
    FileDigestSignResult localSafeSignPDF(String accountId, String sealData, byte[] fileStream,
                                          List<SealPositionDO> positions, SealType sealType, float width,
                                          TokenUser tokenUser);

}
